package com.cpimex.eprice;

import java.sql.*;
import java.util.*;
import com.cpimex.eprice.bean.ClasePBean;
import com.cpimex.eprice.bean.GerenteBean;

public class ClaseProducto {
    private final String EDITAR = "editarClase";

    public ClaseProducto() {
    }

    public ArrayList listarClase(Statement stmt) throws SQLException {
        ArrayList arr_clase = new ArrayList();
        String str_query = "SELECT id_clProd,                                              " +
                           "       codigo_clProd,                                          " +
                           "       codigo_gte,                                             " +
                           "       nombre_usuario,                                         " +
                           " 	   backup_gte,                                             " +
                           "       avisoExp_clProd,                                        " +
                           "       diasExp_clProd,                                         " +
                           "       ( SELECT vu.nombre_usuario FROM ep_vw_usuario vu WHERE responsable_clProd = vu.nomina_usuario ) AS responsable,  "+
                           "       (SELECT vu.nombre_usuario FROM ep_vw_usuario vu WHERE backup_gte = vu.nomina_usuario ) AS backup_gteNombre, " +
                           "       desviacion_clProd,                                      " +
                           "		desviacion_clProdSup,                                  " +
                           "       autorizaDireccion_clProd                                " +
                           " FROM ep_claseProducto                                         " +
                           " INNER JOIN ep_vw_usuario                                      " +
                           " ON ep_claseProducto.codigo_gte = ep_vw_usuario.nomina_usuario ";
        ResultSet rs = stmt.executeQuery(str_query);
        boolean bool_fila = false;

        while(rs.next()){
            Map map_clase = new HashMap();

            String str_idclProd = rs.getString("id_clProd");
            String str_codigoclProd = rs.getString("codigo_clProd");
            String str_codigoGte = rs.getString("codigo_gte");
            String str_nombreUsr = rs.getString("nombre_usuario");
            String str_backupGte = rs.getString("backup_gte");
            String str_backupGteN = rs.getString("backup_gteNombre");
            int int_avisoExp = rs.getInt("avisoExp_clProd");
            int int_diasExp = rs.getInt("diasExp_clProd");
            String str_responsable = rs.getString("responsable");
            int int_desviacion = rs.getInt("desviacion_clProd");
            int int_desviacionSup = rs.getInt("desviacion_clProdSup");
            boolean bool_autorizaDir = rs.getBoolean("autorizaDireccion_clProd");
            String str_autorizaDir = bool_autorizaDir?"Si":"No";
            
            // Mapa parametros url por fila
            map_clase.put("action", EDITAR);
            map_clase.put("str_idclProd", str_idclProd);

            ClasePBean clasep = new ClasePBean();

            clasep.setStr_idclProd(str_idclProd);
            clasep.setStr_codigoclProd(str_codigoclProd);
            clasep.setStr_codigoGte(str_codigoGte);
            clasep.setStr_nombreUsr(str_nombreUsr);
            clasep.setStr_backupGte(str_backupGte);
            clasep.setStr_backupGteN(str_backupGteN);
            clasep.setBool_fila(bool_fila);
            clasep.setMap_params(map_clase);
            clasep.setInt_avisoExp(int_avisoExp);
            clasep.setInt_diasExp(int_diasExp);
            clasep.setStr_responsable(str_responsable);
            clasep.setInt_desviacion(int_desviacion);
            clasep.setInt_desviacionSup(int_desviacionSup);
            clasep.setStr_autorizaDir(str_autorizaDir);

            bool_fila = !bool_fila;
            arr_clase.add(clasep);
        }
        return arr_clase;
    }


    public Map editarClase(Statement stmt, String str_idclProd) throws
            SQLException {
        String str_query = 
        	"SELECT id_clProd, " +
        	"       codigo_clProd, " +
        	"       codigo_gte, " +
        	"       nombre_usuario," +
        	"       backup_gte, " +
        	"       responsable_clProd, " +
        	"       avisoExp_clProd, "+
        	"       diasExp_clProd, "+
        	"       ( SELECT vu.nombre_usuario FROM ep_vw_usuario vu WHERE responsable_clProd = vu.nomina_usuario ) AS responsable,  "+
        	"       (SELECT vu.nombre_usuario FROM ep_vw_usuario vu WHERE backup_gte = vu.nomina_usuario ) AS backup_gteN, " +
        	"       desviacion_clProd ,                  " +
        	"		desviacion_clProdSup,                " +
        	"       autorizaDireccion_clProd             " +
        	" FROM ep_claseProducto                      " +
        	" INNER JOIN ep_vw_usuario" +
        	" ON ep_claseProducto.codigo_gte = ep_vw_usuario.nomina_usuario " +
        	" WHERE id_clProd = '"+str_idclProd+"' ";

       ResultSet rs= stmt.executeQuery(str_query);
       Map map = new HashMap();

       while(rs.next()){
           map.put("str_idclProd", rs.getString("id_clProd"));
           map.put("str_codigoclProd", rs.getString("codigo_clProd"));
           map.put("str_codigoGte", rs.getString("codigo_gte"));
           map.put("str_nombreUsr",  (rs.getString("codigo_gte") + " " + rs.getString("nombre_usuario")));
           map.put("str_backupGte", rs.getString("backup_gte"));
           map.put("str_backupGteN", rs.getString("backup_gteN"));
           map.put("str_responsable", rs.getString("responsable_clProd"));
           map.put("str_responsableN", rs.getString("responsable"));
           map.put("int_diasExp", rs.getString("diasExp_clProd") );
           map.put("int_avisoExp", rs.getString("avisoExp_clProd") );
           map.put("int_desviacion",new Integer( rs.getInt("desviacion_clProd")) );
           map.put("int_desviacionSup",new Integer( rs.getInt("desviacion_clProdSup")) );
           map.put("bool_autorizaDireccion",new Boolean( rs.getBoolean("autorizaDireccion_clProd")) );
       }
       return map;
   }


    public void actualizarClase(Statement stmt, Map map) throws SQLException {
    	boolean bool_autorizaDir = ((Boolean)map.get("bool_autorizaDireccion")).booleanValue();
    	
        String str_query = " UPDATE ep_claseProducto SET                                                                " +
                           "        codigo_clProd = '"+((String)map.get("str_codigoclProd"))+"',                        " +
                           "        codigo_gte = '"+((String)map.get("str_codigoGte"))+"',                              " +
                           "        backup_gte = '"+((String)map.get("str_backupGte"))+"',                              " +
                           "        responsable_clProd = '"+((String)map.get("str_responsable"))+"',                    " +
                           "        avisoExp_clProd = "+((String)map.get("int_avisoExp"))+",                            " +
                           "        diasExp_clProd = "+((String)map.get("int_diasExp"))+",                              " +
                           "        desviacion_clProd  = "+ ((Integer)map.get("int_desviacion")).intValue()+",          " +
                           "        desviacion_clProdSup  = "+ ((Integer)map.get("int_desviacionSup")).intValue()+",    " +
                           "        autorizaDireccion_clProd = "+(bool_autorizaDir?1:0)+"         " +
                           " WHERE id_clProd = '"+((String)map.get("str_idclProd"))+"'                                  ";
        stmt.executeUpdate(str_query);
    }


    public ArrayList listarGerente(Statement stmt) throws SQLException {
        ArrayList arr_gerente = new ArrayList();
        String str_query = " SELECT nomina_usuario,                   " +
                           "        nombre_usuario                    " +
                           " FROM ep_vw_usuario                       " +
                           " WHERE nombre_perfil = 'Gerente'          " +
                           " OR nombre_perfil = 'ResponsableGerencia' ";
        ResultSet rs = stmt.executeQuery(str_query);

        while(rs.next()){
            GerenteBean gerente = new GerenteBean();
            gerente.setStr_nominaUsuario(rs.getString("nomina_usuario"));
            gerente.setStr_nombreUsuario((rs.getString("nomina_usuario") + " " + rs.getString("nombre_usuario")));

            arr_gerente.add(gerente);
        }
        return arr_gerente;
    }

    public ArrayList listarUsuario(Statement stmt, String str_search) throws SQLException {

        ArrayList arr_usuario = new ArrayList();

        if(!str_search.equals("")){
            String str_query = " SELECT nomina_usuario, " +
                               "         nombre_usuario " +
                               " FROM ep_vw_usuario     " +
                               " WHERE nombre_usuario LIKE '%"+ str_search +"%' OR " +
                               "       nomina_usuario LIKE '%"+ str_search +"%' ";

           ResultSet rs = stmt.executeQuery(str_query);
           boolean bool_fila = false;
           while(rs.next()){
               GerenteBean gerente = new GerenteBean();
               gerente.setStr_nominaUsuario(rs.getString("nomina_usuario"));
               gerente.setStr_nombreUsuario(rs.getString("nombre_usuario"));
               gerente.setBool_fila(bool_fila);

               bool_fila = !bool_fila;
               arr_usuario.add(gerente);
           }
        }
        return arr_usuario;
    }
}
